<?php
/**
 * Note: *
 */
namespace App\Traits;

use App\Models\Game\Center\AppSource;

trait AdminTrait
{
    /**
     * 获取查询渠道
     * @param string $source
     * @param array $allowSources
     * @param string $sourceType
     * @return array|float|int|mixed|string
     */
    public function getQuerySources($source = '', $allowSources = [], $sourceType = ''): array
    {
        // 指定渠道类型, 在未选择渠道时使用
        if ($sourceType) {
            $sourceType = is_array($sourceType) ? $sourceType : [$sourceType];
            $sourceType = array_filter($sourceType, function($type) {
                return is_numeric($type);
            });
        }
        if ($sourceType && !$source) {
            $source = AppSource::ofFieldNumeric('type', $sourceType)
                ->ofFieldNumeric('id', $allowSources)
                ->pluck('id')
                ->all();
            if (!$source) return [-1];
        }

        // 数组, 需要取交集
        // 纯数字且非0, 确认是不是可用渠道
        // 纯数字且为0, 只返回可永渠道
        if ($allowSources) {
            if ($source) {
                if (is_array($source)) {
                    $source = array_values(array_intersect($source, $allowSources));
                    if (!$source) $source = [-1];
                } else if (is_numeric($source) && $source != 0) {
                    $source = in_array($source, $allowSources) ? $source : [-1];
                } else if (is_numeric($source) && $source == 0) {
                    $source = $allowSources;
                } else {
                    $source = [-1];
                }
            } else {
                $source = $allowSources;
            }
        } else {
            // 为空时
            if (!$source && !is_numeric($source)) return [];
        }

        return is_array($source) ? $source : [$source];
    }
}
